#ifndef _STAFFMANAGE_H_
#define _STAFFMANAGE_H_

#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <fcntl.h>
#include <strings.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sqlite3.h>
#include <time.h>
#include <string.h>
#include <pthread.h>
#include <semaphore.h>

#define  R  1   //  user register
#define  L  2   //  user login
#define  Q  3   // 查询单个员工
#define  A  4   // 查询全部员工，管理员可以获取全部信息包括工资信息，普通用户不可以
#define  U  5   //更新功能
#define  D  6   //删除
#define  RC  7   //接收客户端发送的消息
#define  SC  8   //发送消息到客户端
#define  C  9   // 员工打卡
#define  UU 10  //修改密码


/**
 * 员工结构体
 */
struct staff
{
	unsigned int id;     //id
	char name[32];        //名字
	unsigned int authority; //权限0为管理员权限，1为普通用户权限
	char gender;         //性别
	unsigned int age;    //年龄
	char education[4];   //学历
	unsigned int salary; //工资
	char password[32]; //密码
	char check_in_time[32]; //打卡时间,如：2017-06-19 08:20:02
	int type;				
};

/**
 * 考勤结构体
 */
struct check_work_time
{
	unsigned int id;        //id
	unsigned int staff_id;  //员工ID
	char check_in_time[32]; //打卡时间,如：2017-06-19 08:20:02
};

/**
 * 内部通信
 */
typedef struct message
{
	unsigned int id;      //id
	unsigned int send_id; //发送员工ID
	unsigned int receive_id; //接收员工ID
	char msg[1024];        // 消息内容
	char send_time[32];   //发送时间
	char read_time[32];   //阅读时间
	unsigned int is_read; //0未读，1已读
	int type;              //代表客户端的操作类型  注册1 登录2、 	武一民 张宏伟				
	struct staff nstaff;	//查询员工信息3、查询全部员工信息4、更新功能5、删除6    赵丹 石璐瑶
							//客户发送聊天信息7 、客户接收聊天记录8、 
							// 考勤打卡9
	char item[20];
}MSG;
//线程传递参数
typedef struct pthread_params
{
	MSG msg;
	struct sockaddr_in client_addr;
}P_PARAMS;

//负责人结构体
typedef struct{
	int connectfd;//链接请求ID
	struct sockaddr_in client_addr;//用户地址
	char connect_time[32];//链接时间
}TCP_MANAGER;

#endif
